[初心者向け] GitHub Packagesでパッケージを公開する
GitHub Packagesを使ってみたくて、試してみました。基本的にはドキュメントどおりにやれば良いのですが、せっかくなので自分のように初めてやる人向けに手順をまとめました。
なお、実際に試してみたコードは以下にあります。
https://github.com/ktsmy/study-github-packages
前提: GitHub Packagesへの認証
GitHub Packagesへパッケージをアップロードするには、書き込み権限を持ったトークンによる認証が必要です。 以下のトークンを利用することができます。
- 個人用アクセストークン
- コマンドラインからパッケージをアップロードする場合に必要です
- 作り方はこちら
read:package
,write:package
の権限が必要です
GITHUB_TOKEN
(GitHub Actionsからアップロードする場合)- GitHub Actionsのワークフローでは、自動的に生成される
GITHUB_TOKEN
シークレットが認証に使えますので、個人用アクセストークンを使う必要はありません - 詳細はこちら
- GitHub Actionsのワークフローでは、自動的に生成される
npmの場合
設定
package.json にrepository
の設定を追加します。
{ "name": "@ktsmy/hello-world", "version": "1.0.3", "description": "", "main": "index.js", "scripts": { "build": "tsc" }, "repository": { "type": "git", "url": "git://github.com/ktsmy/study-github-packages.git" }, "author": "Katsumi Yamashita", "license": "ISC", "devDependencies": { "typescript": "^3.8.3" } }
また、パッケージをアップロードするレジストリの設定が必要です。 .npmrc で設定する場合は以下のようになります。
registry=https://npm.pkg.github.com/ktsmy
または package.json の publishConfig
で指定することもできます。
"publishConfig": { "registry":"https://npm.pkg.github.com/" },
アップロード
npm publish
でアップロードできます。
アップロードには認証用のトークンが必要です。手動でnpm publish
を実行する場合は、npmの設定ファイル ~/.npmrc に以下のようにレジストリと個人用アクセストークンを書きます。
//npm.pkg.github.com/:_authToken=xxxxxxxxxx
GitHub Actionsからアップロードする場合はGITHUB_TOKEN
シークレットを使います。以下はワークフローの例です。npm publish
を実行するところで環境変数にGITHUB_TOKEN
シークレットの値を設定します。
name: Node.js Package on: release: types: [created] jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 # GitHub Packagesへの公開のために.npmrcファイルをセットアップ - uses: actions/setup-node@v1 with: node-version: '12.x' registry-url: 'https://npm.pkg.github.com' - run: | npm ci npm run build npm publish env: NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
Java (Gradle) の場合
設定
Gradleでパッケージをアップロードするには maven-publish プラグインを利用します。
以下はbuild.gradleの例です。plugins
にmaven-publishを追加し、またpublishing
の設定を追加しています。publishing
の中のcredentials
でGitHubの認証情報を設定します。
plugins { id 'java' id 'maven-publish' } group 'com.ktsmy' version '1.0.0' sourceCompatibility = 1.8 repositories { mavenCentral() } publishing { repositories { maven { name = "GitHubPackages" url = uri("https://maven.pkg.github.com/ktsmy/study-github-packages") credentials { // GitHubのユーザー名を指定する username = project.findProperty("gpr.user") ?: System.getenv("GITHUB_ACTOR") // GitHubの認証用トークンを指定する password = project.findProperty("gpr.key") ?: System.getenv("GITHUB_TOKEN") } } } publications { gpr(MavenPublication) { from(components.java) } } }
アップロード
gradle publish
でアップロードできます。
アップロード実行時にusername
とpassword
を指定する必要があります。手動で実行する場合は例えば以下のようになります。
$ gradle publish -Pgpr.user=ktsmy -Pgpr.key=xxxxxxxx
GitHub Actionsから行う場合、ユーザ名は環境変数GITHUB_ACTOR
に入っています(参考)。また認証にはGITHUB_TOKEN
シークレットを使うことができます。例えば以下のようなワークフローになります。
name: Publish Java package to GitHub Packages on: release: types: [created] jobs: publish: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - uses: actions/setup-java@v1 with: java-version: 1.8 - name: Publish package run: gradle publish env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
その他の言語
自分は試してはいませんが、現時点でGitHub Packagesは上記のnpmとJava以外にも以下のパッケージに対応しています。
- gem (Ruby)
- Dockerイメージ
- .NET